package Utilities;


/*
 * Ruta.java
 * Realizado por: Paulo Chang        11076
 *                Oscar Castañeda    11086
 *                Francisco Martínez 11096
 * Creado el 20 de agosto del 2011
 * Modificado por última vez el 30 de agosto del 2011.
 * Esta clase representa la ruta que sigue un barco durante su recorrido a lo
 * largo de los puertos del programa.
 */

/**
 * Clase Ruta
 * @author Oscar Castañeda
 */

import java.io.Serializable;
import java.util.Date;
import java.util.ArrayList;

public class Ruta implements Serializable{

    /*------------------------------------------------------------------------
     * Atributos
     ------------------------------------------------------------------------*/

    private String capitan; //Nombre del capitán del barco en la ruta.
    private ArrayList<Escala> escalas; //Lista que contiene las distintas escalas de la ruta.
    private int actualEscala; //Posición en la lista escala donde arribará el barco próximamente.

    /*-------------------------------------------------------------------------
     * Métodos
     -------------------------------------------------------------------------*/
    
    /**
     * Constructor: Crea una ruta que contiene a la lista 
     * @param capitan String con nombre del capitán de la ruta.
     * @param escalas Lista que contiene las distintas escalas que conforman a esta ruta.
     */
    
    public Ruta(String capitan, ArrayList<Escala> escalas){
        this.capitan=capitan;
        this.escalas=escalas;
        this.actualEscala=0;
        }

    /**
     * getCapitan: Devuelve el nombre del capitán
     * @return capitan String con el nombre del capitán.
     */
    public String getCapitan() {
        return capitan;
    }

    /**
     * getEscalas: Devuelve la lista escalas, que contiene las distintas Escalas por las cuales pasará el barco.
     * @return escalas ArrayList con las distintas escalas que conforman la ruta del barco.
     */
    public ArrayList<Escala> getEscalas() {
        return escalas;
    }
    
    /**
     * puertosPorVisitarDurante: Devuelve una lista con los puertos que se visitarán en un período dado de tiempo.
     * @param fechaMenor Límite inferior el período.
     * @param fechaMayor Límite superior del período.
     * @return puertosAVisitar ArrayList de puertos.
     */
    public ArrayList<Puerto> puertosPorVisitarDurante(Date fechaMenor, Date fechaMayor){
        ArrayList<Puerto> puertosAVisitar=new ArrayList<Puerto>();
        for (Escala escala:escalas){
            if (escala.llegaEntre(fechaMenor, fechaMayor)){
                puertosAVisitar.add(escala.getPuerto());
            }         
        }
        return puertosAVisitar;
    }

    /**
     * getActualEscala: Devuelve la posición de la actual escala donde se encuentra el barco en la lista escalas.
     * @return actualEscala Entero que representa la posición de la escala donde está el barco.
     */
    public int getActualEscala() {
        return actualEscala;
    }

    /**
     * setActualEscala Permite modificar el valor de la actual escala donde se encuentra el barco.
     * @param proximaEscala Posición de la próxima escala en la cual pasará el barco.
     */
    public void setActualEscala(int proximaEscala) {
        this.actualEscala = proximaEscala;
    }
    
    /**
     * toString: Devuelve la información de cada una de las escalas que conforman a la ruta.
     * @return msj String con la información indicada
     */
    @Override
    public String toString(){
        String msj;
        msj="Ruta:";
        for (int i=0; i<escalas.size(); i++){
            int ordinal=i+1;
            msj+="\n"+ordinal+") "+escalas.get(i);
        }
        return msj;
    }
    
   }
